//-------------------------------------------------------------------
//	Copyright (c) 2010-2012 Zhirnov Andrey
//	This file is part of the "UXGEN" project.
//	See copyright notice in "Engine.h".
//-------------------------------------------------------------------

#include "CScene.h"

namespace Engine
{
namespace Scene
{
	
/*
=================================================
	
=================================================
*/
	CScene::CScene()
	{
	}
	
/*
=================================================
	
=================================================
*/
	CScene::~CScene()
	{
	}
	
/*
=================================================
	
=================================================
*/
	void CScene::AddNode(ISceneNode *pNode)
	{
		_aNodes.PushBack( pNode );
	}
	
/*
=================================================
	
=================================================
*/
	void CScene::RemoveNode(ISceneNode *pNode)
	{
		for (usize i = 0; i < _aNodes.Count(); ++i) {
			if ( pNode == _aNodes[i] ) {
				_aNodes.FastErase( i );
				return;
			}
		}
	}
	
/*
=================================================
	
=================================================
*/
	bool CScene::GetNode(const string &sName, ISceneNode *&pNode)
	{
		TSNodeMessage	msg;
		msg.GetNode( sName );

		return SendMsgForEach( _aNodes, msg, pNode );
	}
	
/*
=================================================
	
=================================================
*/
	void CScene::AddSystem(ISceneSystem *pSys)
	{
		_aSystems.PushBack( pSys );
	}
	
/*
=================================================
	
=================================================
*/
	void CScene::RemoveSystem(ISceneSystem *pSys)
	{
		for (usize i = 0; i < _aSystems.Count(); ++i) {
			if ( pSys == _aSystems[i] ) {
				_aSystems.FastErase( i );
				return;
			}
		}
	}
	
/*
=================================================
	
=================================================
*/
	bool CScene::GetSystem(const string &sName, ISceneSystem *&pSys)
	{
		TSSystemMessage	msg;
		msg.GetSystem( sName );

		return SendMsgForEach( _aSystems, msg, pSys );
	}
	
/*
=================================================
	
=================================================
*/
	void CScene::Destroy()
	{
	}
	
/*
=================================================
	
=================================================
*/
	bool CScene::ProcessMessage(TSceneMessage &sMsg)
	{
		return false;
	}

//-------------------------------------------------------------------

}	// Scene
}	// Engine